package com.hunter.applearn.fragment

import android.content.res.Resources
import android.os.Bundle
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.EditText
import android.widget.ImageView
import androidx.constraintlayout.widget.ConstraintLayout
import androidx.viewpager2.widget.ViewPager2
import com.google.android.material.tabs.TabLayout
import com.google.android.material.tabs.TabLayoutMediator
import com.hunter.applearn.R
import com.hunter.applearn.adapter.HomeViewPagerAdapter

/**
 * 首页Fragment - 包含TabLayout和ViewPager2实现的多标签页面
 */
class HomeFragment : Fragment() {

    // 声明视图控件
    private lateinit var viewPager: ViewPager2
    private lateinit var tabLayout: TabLayout
    private lateinit var etSearch: EditText
    private lateinit var searchIcon: ImageView

    /**
     * 创建Fragment的视图
     */
    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        // 加载布局文件
        return inflater.inflate(R.layout.fragment_home, container, false)
    }

    /**
     * 视图创建完成后初始化各个控件
     */
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        // 初始化视图控件
        initViews(view)

        // 修复搜索框布局问题
        setupSearchBox()

        // 设置ViewPager2和TabLayout
        setupViewPager()
    }

    /**
     * 初始化各个视图控件
     */
    private fun initViews(view: View) {
        viewPager = view.findViewById(R.id.viewPager)
        tabLayout = view.findViewById(R.id.tabLayout)
        etSearch = view.findViewById(R.id.et_search)
        searchIcon = view.findViewById(R.id.search_icon)
    }

    /**
     * 设置搜索框的布局和样式
     * 修复搜索图标的大小和边距问题
     */
    private fun setupSearchBox() {
        // 设置搜索图标的布局参数
        val layoutParams = searchIcon.layoutParams as ConstraintLayout.LayoutParams
        layoutParams.width = 32.dp  // 设置固定宽度
        layoutParams.marginStart = 8.dp  // 左边距
        layoutParams.marginEnd = 8.dp    // 右边距

        // 移除宽度约束，避免被父布局限制
        layoutParams.constrainedWidth = false
        searchIcon.layoutParams = layoutParams
        searchIcon.requestLayout()  // 重新应用布局参数

        // 设置EditText样式
        etSearch.background = null  // 移除默认背景
        etSearch.setPadding(0, 0, 8.dp, 0)  // 设置内边距
    }

    /**
     * 设置ViewPager2和TabLayout
     * 创建各个标签页并关联TabLayout和ViewPager2
     */
    private fun setupViewPager() {
        // 创建适配器
        val adapter = HomeViewPagerAdapter(this)

        // 添加各个标签页的Fragment和标题
        adapter.addFragment(FollowFragment(), "关注")
        adapter.addFragment(RecommendFragment(), "推荐")
        adapter.addFragment(NewsFragment(), "新闻")
        adapter.addFragment(GameFragment(), "游戏")
        adapter.addFragment(EntertainmentFragment(), "娱乐")
        adapter.addFragment(VarietyFragment(), "综艺")

        // 设置适配器到ViewPager2
        viewPager.adapter = adapter

        /**
         * 关联TabLayout和ViewPager2
         * TabLayoutMediator会自动同步Tab的选中状态和ViewPager2的页面切换
         *
         * { tab, position -> ... } 是一个lambda表达式，为每个Tab设置标题
         */
        TabLayoutMediator(tabLayout, viewPager) { tab, position ->
            // 设置每个Tab的标题文字
            tab.text = adapter.getTitle(position)
        }.attach()  // 立即关联
    }

    /**
     * 扩展函数：将dp值转换为像素值
     * 使用：32.dp 返回对应的像素值
     */
    private val Int.dp: Int
        get() = (this * Resources.getSystem().displayMetrics.density).toInt()

    /**
     * 创建HomeFragment实例的伴生对象方法
     * 推荐使用这种方式创建Fragment实例，便于参数传递
     */
    companion object {
        /**
         * 创建新的HomeFragment实例
         *
         * @return HomeFragment的新实例
         */
        fun newInstance(): HomeFragment = HomeFragment()
    }
}